//toernooiaanmaken
package model;

import componenten.Database;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Gebruiker
 */
public class TafelRondeSpeler {

    private int tafelnummer;
    private int rondenummer;
    private int speler;
    private String toernooiNaam;
    private String toernooiDatum;
    private ArrayList bericht;
    private boolean gevalideerd;

    public TafelRondeSpeler() {

        this.tafelnummer = 0;
        this.rondenummer = 0;
        this.speler = 0;
        this.toernooiNaam = "";
        this.toernooiDatum = "";

        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    public TafelRondeSpeler(String argTafelNummer, String argRondeNummer, String argToernooiDatum, String argToernooiNaam, String argSpelerId) {
        String sql = "SELECT * FROM tafelronde_speler"
                + " WHERE tafelronde_tafelnummer = " + argTafelNummer
                + " AND tafelronde_rondenummer = " + argRondeNummer
                + " AND toernooi_datum = '" + argToernooiDatum + "'"
                + " AND toernooi_naam = '" + argToernooiNaam + "'"
                + " AND speler_id = " + argSpelerId;

        System.out.println(sql);

        try {
            ResultSet result = Database.executeSelectQuery(sql);
            result.next();
            this.tafelnummer = result.getInt("tafelronde_tafelnummer");
            this.rondenummer = result.getInt("tafelronde_rondenummer");
            this.speler = result.getInt("speler_id");
            this.toernooiNaam = result.getString("toernooi_naam");
            this.toernooiDatum = result.getString("toernooi_datum");


        } catch (SQLException e) {
            System.out.print(e);
        }

        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    private void valideren() {

        if (this.getSpeler() == 0) {
            this.getBericht().add("speler is verplicht");
            this.setGevalideerd(false);
        }
        if ("".equals(this.getToernooiNaam())) {
            this.getBericht().add("toernooinaam is verplicht");
            this.setGevalideerd(false);
        }
        if ("".equals(this.getToernooiDatum())) {
            this.getBericht().add("toernooidatum is verplicht");
            this.setGevalideerd(false);
        }

    }

    public boolean toevoegen() {
        this.valideren();
        if (this.isGevalideerd()) {
            String sqlQuery = "INSERT INTO fullhouse.tafelronde_speler ("
                    + "tafelronde_tafelnummer, "
                    + "tafelronde_rondenummer, "
                    + "speler_id,"
                    + "toernooi_datum, "
                    + "toernooi_naam "
                    + ") VALUES ("
                    + this.getTafelnummer() + " , "
                    + this.getRondenummer() + " , "
                    + this.getSpeler() + " , "
                    + "'" + this.getToernooiDatum() + "'" + " , "
                    + "'" + this.getToernooiNaam() + "'"
                    + ")";

            System.out.println(sqlQuery);
            if (Database.executeInsertQuery(sqlQuery) != 1) {
                this.setGevalideerd(false);
                this.getBericht().add("Er is een fout onstaan tijdens het opslaan probeer opnieuw");
            }
        }
        return this.isGevalideerd();
    }

    public boolean verwijderen() {
        if (this.isGevalideerd()) {

            String sqlQuery = "DELETE FROM fullhouse.tafelronde_speler "
                    + "WHERE "
                    + "toernooi_datum = '" + this.getToernooiDatum() + "' "
                    + "AND "
                    + "toernooi_naam = '" + this.getToernooiNaam() + "' "
                    + "AND "
                    + "tafelronde_tafelnummer = " + this.getTafelnummer() + " "
                    + "AND "
                    + "tafelronde_rondenummer = " + this.getRondenummer() + " "
                    + "AND "
                    + "speler_id = " + this.getSpeler();
            System.out.println(sqlQuery);
            if (Database.executeDeleteQuery(sqlQuery) != 1) {
                this.setGevalideerd(false);
                this.getBericht().add("Er is een fout onstaan tijdens het verwijderen probeer opnieuw");
            }
        }
        return this.isGevalideerd();
    }

    public boolean bijwerken(String argTafelNummer, String argRondeNummer, String argToernooiDatum, String argToernooiNaam, String argSpelerId) {
        this.valideren();
        if (this.isGevalideerd()) {
            String sqlQuery = "UPDATE fullhouse.tafelronde_speler SET "
                    + "toernooi_naam = '" + this.getToernooiNaam() + "', "
                    + "toernooi_datum = '" + this.getToernooiDatum() + "', "
                    + "tafelronde_tafelnummer = " + this.getTafelnummer() + ", "
                    + "tafelronde_rondenummer = " + this.getRondenummer() + ", "
                    + "speler_id = " + this.getSpeler() + ", "
                    + "WHERE toernooi_naam = '" + argToernooiNaam + "' "
                    + "AND toernooi_datum = '" + argToernooiDatum + "'"
                    + "AND tafelronde_tafelnummer = " + argTafelNummer
                    + "AND tafelronde_rondenummer = " + argRondeNummer
                    + "AND speler_id = " + argSpelerId;


            if (Database.executeUpdateQuery(sqlQuery) != 1) {
                this.setGevalideerd(false);
                this.getBericht().add("Er is een fout onstaan tijdens het bijwerken probeer opnieuw");
            }
        }
        return this.isGevalideerd();
    }

    /**
     * @return the bericht
     */
    public ArrayList getBericht() {
        return bericht;
    }

    public void resetBericht() {
        this.setBericht(new ArrayList());
        this.gevalideerd = true;
    }

    /**
     * @return the gevalideerd
     */
    public boolean isGevalideerd() {
        return gevalideerd;
    }

    public String[] getInformatie() {
        Lid lid = new Lid("" + this.speler);
        return new String[]{"" + this.getRondenummer(), "" + this.getTafelnummer(), lid.getVoornaam() + " " + lid.getAchternaam(), "" + this.getSpeler()};
    }

    /**
     * @return the tafelnummer
     */
    public int getTafelnummer() {
        return tafelnummer;
    }

    /**
     * @param tafelnummer the tafelnummer to set
     */
    public void setTafelnummer(int tafelnummer) {
        this.tafelnummer = tafelnummer;
    }

    /**
     * @return the rondenummer
     */
    public int getRondenummer() {
        return rondenummer;
    }

    /**
     * @param rondenummer the rondenummer to set
     */
    public void setRondenummer(int rondenummer) {
        this.rondenummer = rondenummer;
    }

    /**
     * @return the winnaar
     */
    public int getSpeler() {
        return speler;
    }

    /**
     * @param winnaar the winnaar to set
     */
    public void setSpeler(int winnaar) {
        this.speler = winnaar;
    }

    /**
     * @return the toernooiNaam
     */
    public String getToernooiNaam() {
        return toernooiNaam;
    }

    /**
     * @param toernooiNaam the toernooiNaam to set
     */
    public void setToernooiNaam(String toernooiNaam) {
        this.toernooiNaam = toernooiNaam;
    }

    /**
     * @return the toernooiDatum
     */
    public String getToernooiDatum() {
        return toernooiDatum;
    }

    /**
     * @param toernooiDatum the toernooiDatum to set
     */
    public void setToernooiDatum(String toernooiDatum) {
        this.toernooiDatum = toernooiDatum;
    }

    /**
     * @param bericht the bericht to set
     */
    public void setBericht(ArrayList bericht) {
        this.bericht = bericht;
    }

    /**
     * @param gevalideerd the gevalideerd to set
     */
    public void setGevalideerd(boolean gevalideerd) {
        this.gevalideerd = gevalideerd;
    }
}